package com.broada.apm.dao;

import java.util.List;

import com.broada.apm.model.ProtocolRelation;
import com.broada.apm.model.Relation;
import com.broada.apm.model.Relations;
import com.broada.apm.model.Service;
import com.broada.apm.model.TopologyRelation;

public interface RelationDao {

	/**
	 * 添加节点关系
	 * @param relation
	 */
	public void addRelation(Relation relation);
	
	/**
	 * 删除节点关系
	 * @param relation
	 */
	public void deleteRelation(Relation relation);
	
	/**
	 * 删除节点关系
	 * @param relation
	 */
	public void deleteAllDisRelation();
	
	/**
	 * 根据节点关系id查询
	 * @param id
	 * @return
	 */
	public Relation getRelationById(String id);
	
	/**
	 * 根据条件查询节点关系
	 * @param relation
	 * @return
	 */
//	public List<Relation> getRelation(Relation relation);
	
	/**
	 * 根据应用系统id查询节点关系
	 * @param appId
	 * @return
	 */
	public List<Relation> getRelationByAppId(String appId);

	/**
	 * 根据应用系统删除节点关系
	 * @param appId
	 */
	public void deleteRelationByAppId(String appId);

	/**
	 * 查询包含serviceIds节点的所有节点关系
	 * @param serviceIds
	 * @return
	 */
	public List<Relation> getRelationByFromOrTo(String[] serviceIds);

	/**
	 * 删除包含serviceIds节点的所有节点关系
	 * @param serviceIds
	 */
	public void deleteRelationByFromOrTo(String[] serviceIds);

	/**
	 * 获取上级或下级节点关系
	 * @param fromSerIds
	 * @param toSerIds
	 * @return
	 */
	public List<Relation> getRelationByFromAndTo(String[] fromSerIds,
			String[] toSerIds);

	/**
	 * 获取下级关系
	 * @param srcIp
	 * @return
	 */
	public List<ProtocolRelation> getDisRelationBySrcIp(Long srcIp);

	/**
	 * 获取上级关系
	 * @param serviceId
	 * @return
	 */
	public List<ProtocolRelation> getDisRelationByServiceId(String serviceId);

	/**
	 * 获取上下级关系
	 * @param relationId
	 * @return
	 */
	public ProtocolRelation getDisRelationById(String relationId);

	/**
	 * 添加上下级关系
	 * @param relation
	 */
	public void addDisRelation(ProtocolRelation relation);

	/**
	 * 删除上下级关系
	 * @param relation
	 */
	public void deleteDisRlation(ProtocolRelation relation);

	/**
	 * 获取上下级关系
	 * @param service
	 * @return
	 */
	public List<ProtocolRelation> getDisRelationByService(Service service);
	
	/**
	 * 查询所有关系
	 * @return
	 */
	public List<ProtocolRelation> getAllDisRelation();
	
	/**
	 * 查询所有关系
	 * @return
	 */
	public List<Relations> getAllDisRelationTopology();
	
	/**
	 * 查询所有关系
	 * @return
	 */
	public List<TopologyRelation> getRelationTopology();
	
	/**
	 * 删除service数据时，要删除relations相关的数据
	 */
	public void deleteValidRelation();
}
